package esmaltes.bean;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.PersistenceException;

import esmaltes.model.Efeito;
import esmaltes.repository.EfeitoRepository;

@Named
@javax.faces.view.ViewScoped
public class CadastroConsultaEfeitoBean extends TemplateBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private EfeitoRepository efeitoRepository;
	
	private Efeito efeito = new Efeito();
	
	private List<Efeito> efeitos;
	
	private List<Efeito> efeitosFiltradas;
		
	private Efeito efeitoSelecionada;

	public void salvar() {
		
		Efeito efeitoDescExistente = efeitoRepository.buscaPorDescricao(this.efeito.getDescricao());
		
		if (efeitoDescExistente != null && !efeitoDescExistente.equals(this.efeito)) {
			super.showFacesMessage("Já existe uma efeito com a descrição informada.", 1);
		} else {
			try {
				
				this.efeitoRepository.guardar(efeito);
				this.efeito = new Efeito();
				super.showFacesMessage("Registro salvo com sucesso!", 2);
				
				consulta();
				
			} catch (Exception e) {
				
				super.showFacesMessage("Erro ao tentar salvar o registro.", 1);
				System.err.println("Erro: " + e.getMessage());
				
				consulta();
				
			}
		}
		
	}
	
	public void excluir() {
		Efeito efeitoExclusao = efeitoRepository.getManager().merge(efeitoSelecionada);
		
		try {
			
			efeitoRepository.remover(efeitoExclusao);
			efeitos.remove(efeitoSelecionada);
			super.showFacesMessage("Efeito excluída com sucesso!", 2);
			
			consulta();
			
		} catch (PersistenceException pe) {
			
			super.showFacesMessage("Efeito não pode ser excluída.", 1);
			System.err.println("Erro: " + pe.getMessage());
			
		} catch (Exception e) {
			
			super.showFacesMessage("Erro ao tentar excluir o registro.", 1);
			System.err.println("Erro: " + e.getMessage());
			
		}
		
	}

	public void consulta() {
		this.efeitos = efeitoRepository.todos("cd_efeito");
	}

	public Efeito getEfeito() {
		return efeito;
	}

	public void setEfeito(Efeito efeito) {
		this.efeito = efeito;
	}

	public List<Efeito> getEfeitos() {
		return efeitos;
	}

	public void setEfeitos(List<Efeito> efeitos) {
		this.efeitos = efeitos;
	}

	public List<Efeito> getEfeitosFiltradas() {
		return efeitosFiltradas;
	}

	public void setEfeitosFiltradas(List<Efeito> efeitosFiltradas) {
		this.efeitosFiltradas = efeitosFiltradas;
	}

	public Efeito getEfeitoSelecionada() {
		return efeitoSelecionada;
	}

	public void setEfeitoSelecionada(Efeito efeitoSelecionada) {
		this.efeitoSelecionada = efeitoSelecionada;
	}

}
